package cn.itsource.work_queue;

import cn.itsource.ConnectionUtil;
import com.rabbitmq.client.*;

import java.io.IOException;

//消费者
public class Rev1 {

    public static void main(String[] args) throws Exception {

        try(
                //1.创建连接对象
                Connection connection = ConnectionUtil.getConnection();
                //2.创建通道
                Channel channel = connection.createChannel();
        ) {
            //3.声明一个队列
            channel.queueDeclare(
                    //队列名称  与发送者一致
                    Send.QUEUE_NAME_WORK_QUEUE_1107,
                    true,   //是否持久化
                    false,  //是否一个队列占一个连接
                    false,  //服务器不使用的时候删除他
                    null    //队列的其他属性
            );

            //同一时间只 只能处理一个消息 ，这里因为Rev1性能低下 所以就会交给Rev2处理
            channel.basicQos(1);
            //4.接收消息
            Consumer consumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

                    //模拟一个报错 这里就需要手动签收
                    //int o = 1/0;
                    System.out.println("R1消息内容" + new String(body));

                    //消息ID
                    long deliveryTag = envelope.getDeliveryTag();
                    //手动签收  消息ID和是否需要签收所有消息
                    channel.basicAck(deliveryTag,false);
                    try {//模拟性能低下
                        Thread.sleep(100000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };

            //消费消息
            channel.basicConsume(
                    Send.QUEUE_NAME_WORK_QUEUE_1107,  //接收消息的队列

                    false,   //是否自动签收 true 自动 false手动
                    consumer     //消费回调方法
            );
            //异步执行 需要睡一会儿 等待回调处理消息
            Thread.sleep(1000000);

        }

        }



}
